package com.faya.green.dao.authority;

import com.faya.green.model.Role;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author ：LX
 * 创建时间： 2018/8/24. 23:59
 * 地点：广州
 * 目的: 角色
 * 备注说明：
 */
public interface RoleDao {

    /**
     * 添加一个角色
     * @param role 角色
     */
    void addRole(Role role);

    /**
     * 更新一个角色
     * @param role 角色
     */
    void updateRole(Role role);

    /**
     * 根据主键查询一个角色
     * @param id 角色主键
     * @return
     */
    @Select("select * from role where id = #{id,jdbcType=VARCHAR} and status !='2' ")
    Role getRoleById(String id);

    /**
     * 获取全部角色
     * @return
     */
    @Select("select * from role where status in ('0','1') order by sort")
    List<Role> getRoleList();

    /**
     * 根据创建人用户ID 查询角色
     * @param createUser 创建人用户ID
     * @return
     */
    @Select("select * from role where createUser = #{createUser,jdbcType=VARCHAR} and status in ('0','1') order by sort")
    List<Role> getRoleByUserId(String createUser);


    /**
     * 获取用户拥有的角色
     * @param userId 用户id
     * @return
     */
    @Select("select * from role where status in ('0','1') and id in (select roleId from RoleUser where userId = #{userId,jdbcType=VARCHAR} and status in ('0','1')) ")
    List<Role> getUserByRole(String userId);


    /**
     * 获取用户拥有的角色和创建的角色
     * @param userId 用户ID
     * @return
     */
    @Select("select r.* from role r left join RoleUser ru on r.id = ru.roleId where ru.userId = #{userId,jdbcType=VARCHAR} or r.createUser = #{userId,jdbcType=VARCHAR} and r.status != '2'  GROUP by r.id ")
    List<Role> getUserByRoleCreatRole(String userId);

    /**
     * 根据角色名查到唯一的角色
     * @param name 角色名
     * @return
     */
    @Select("select * from role r where r.name = #{name,jdbcType=VARCHAR}")
    Role getRoleByName(String name);

    /**
     * 根据角色ID删除角色
     * @param id 角色id
     */
    @Delete("delete from role where id = #{id, jdbcType=VARCHAR} ")
    void delRole(String id);
}
